package lin

import (
	"strconv"
	"strings"
	"time"
)

type L类型转换 struct {
}

func (L类型转换) D到文本(任意数据 any) (返回值 string) {
	return any_到文本(任意数据)
}

func (L类型转换) D到整数(任意数据 any) (返回值 int) {
	文本 := any_到文本(任意数据)
	位置 := strings.Index(文本, ".")
	if 位置 != -1 {
		文本 = 文本[:位置]
	}
	if 文本 == "true" {
		return 1
	}
	结果, err := strconv.ParseInt(文本, 0, 64)
	if err != nil {
		return 0
	}
	返回值 = int(结果)
	return
}

func (L类型转换) D到双精度小数(任意数据 any) (返回值 float64) {
	文本 := any_到文本(任意数据)
	结果, err := strconv.ParseFloat(文本, 64)
	if err != nil {
		return 0
	}
	返回值 = 结果
	return
}

func (L类型转换) D到逻辑值(任意数据 any) (返回值 bool) {
	文本 := any_到文本(任意数据)
	if 文本 == "真" || 文本 == "1" {
		return true
	}
	if 文本 == "假" || 文本 == "0" {
		return false
	}
	结果, err := strconv.ParseBool(文本)
	if err != nil {
		return false
	}
	返回值 = 结果
	return
}

func (L类型转换) D到字节集(任意数据 any) (返回值 []byte) {
	文本 := any_到文本(任意数据)
	返回值 = []byte(文本)
	return
}

// 格式参照
// @	"2006-01-02 15:04:05",
// @	"2006/01/02 15:04:05",
// @	"2006/01/02",
// @	"2006-01-02",
// @	"2006年01月02日",
// @	"2006年01月02日 15时04分05秒",
// @	"2006年01月02日 15:04:05",
// @	"January 02, 2006 15:04:05",
// @	"02 Jan 2006 15:04:05",
// @	"02.01.2006 15:04:05",
// @	"Mon Jan 02 15:04:05 MST 2006",
// @	"2006-01-02T15:04:05",
// @	"2006-01-02 15:04:05Z",
// @	"2006-01-02T15:04:05Z",
// @	"2006-01-02T15:04:05.999999999Z07:00",
// @	"Jan _2 15:04:05",
// @	"Jan _2 15:04:05.000",
// @	"Jan _2 15:04:05.000000",
// @	"Jan _2 15:04:05.000000000",
// @	 "15:04:05",
// @	 "01/02 03:04:05PM '06 -0700",
// @	 "Mon Jan _2 15:04:05 2006",
// @	 "Mon Jan _2 15:04:05 MST 2006",
// @	 "Mon Jan 02 15:04:05 -0700 2006",
// @	 "02 Jan 06 15:04 MST",
// @	 "02 Jan 06 15:04 -0700",
// @	 "Monday, 02-Jan-06 15:04:05 MST",
// @	 "Mon, 02 Jan 2006 15:04:05 MST",
// @	 "Mon, 02 Jan 2006 15:04:05 -0700",
// @	 "2006-01-02T15:04:05Z07:00",
// @	 "3:04PM",
func (L类型转换) D到时间(任意数据 any, 解析格式_可空 ...string) (返回值 time.Time) {
	文本 := any_到文本(任意数据)
	if len(解析格式_可空) > 0 && 解析格式_可空[0] != "" {
		返回值, _ = time.Parse(解析格式_可空[0], 文本)

	} else {
		for _, v := range 全_时间格式 {
			if 时间, err := time.Parse(v, 文本); err == nil {
				返回值 = 时间
				return
			}

		}

	}

	return
}
